home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / mui / mui-tools / multiuser / src / support / login.c < prev    next >
C/C++ Source or Header  |  1995-03-09  |  3KB  |  98 lines

  1. /************************************************************
  2. * MultiUser - MultiUser Task/File Support System                *
  3. * ---------------------------------------------------------    *
  4. * Login                                                                        *
  5. * ---------------------------------------------------------    *
  6. * © Copyright 1993-1994 Geert Uytterhoeven                        *
  7. * All Rights Reserved.                                                    *
  8. ************************************************************/
  9.  
  10.  
  11. #include <exec/types.h>
  12. #include <dos/dos.h>
  13. #include <proto/exec.h>
  14. #include <proto/dos.h>
  15. #include <utility/tagitem.h>
  16. #include <libraries/multiuser.h>
  17. #include <proto/multiuser.h>
  18.  
  19. #include "Login_rev.h"
  20.  
  21. #include "Locale.h"
  22.  
  23. char __VersTag__[] = VERSTAG;
  24.  
  25.  
  26. int __saveds Start(char *arg)
  27. {
  28.     struct ExecBase *SysBase;
  29.     struct DosLibrary *DOSBase;
  30.     struct muBase *muBase = NULL;
  31.     struct RDArgs *args;
  32.     LONG argarray[] = {
  33. #define argUSERID        0
  34. #define argGUI            1
  35. #define argTASK        2
  36. #define argOWN            3
  37. #define argGLOBAL        4
  38. #define argPROCESS    5
  39.         NULL, NULL, NULL, NULL, NULL, NULL
  40.     };
  41.     struct TagItem tags[6];
  42.     struct Task *task = NULL;
  43.     int rc = RETURN_ERROR;
  44.     struct LocaleInfo li;
  45.  
  46.     SysBase = *(struct ExecBase **)4;
  47.  
  48.     if ((!(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library", 37))) ||
  49.          (!(muBase = (struct muBase *)OpenLibrary("multiuser.library", 39)))) {
  50.         rc = ERROR_INVALID_RESIDENT_LIBRARY;
  51.         goto Exit;
  52.     }
  53.  
  54.     OpenLoc(&li);
  55.  
  56.     args = ReadArgs("USERID,GUI/S,TASK/K,OWN/S,GLOBAL/S,PROCESS/K/N", argarray,
  57.                          NULL);
  58.     if (!args)
  59.         PrintFault(IoErr(), NULL);
  60.     else if (argarray[argTASK] && argarray[argPROCESS])
  61.         PutStr(GetLocS(&li,MSG_BOTH_TASKPROC));
  62.     else if (argarray[argUSERID] && argarray[argOWN])
  63.         PutStr(GetLocS(&li,MSG_BOTH_USERIDOWN));
  64.     else if (argarray[argTASK] && !(task = FindTask((char *)argarray[argTASK])))
  65.         VPrintf(GetLocS(&li,MSG_TASKNOTFOUND), (ULONG *)&argarray[argTASK]);
  66.     else if (argarray[argPROCESS] &&
  67.                 !(task = (struct Task *)FindCliProc((ULONG)*(ULONG *)argarray[argPROCESS])))
  68.         VPrintf(GetLocS(&li,MSG_PROCNOTFOUND), (ULONG *)argarray[argPROCESS]);
  69.     else {
  70.         tags[0].ti_Tag = muT_Graphical;
  71.         tags[0].ti_Data = argarray[argGUI];
  72.         tags[1].ti_Tag = muT_Task;
  73.         tags[1].ti_Data = (LONG)task;
  74.         tags[2].ti_Tag = muT_Own;
  75.         tags[2].ti_Data = argarray[argOWN];
  76.         tags[3].ti_Tag = muT_Global;
  77.         tags[3].ti_Data = argarray[argGLOBAL];
  78.         tags[4].ti_Tag = muT_UserID;
  79.         tags[4].ti_Data = argarray[argUSERID];
  80.         tags[5].ti_Tag = TAG_DONE;
  81.         if (muLoginA(tags)) {
  82.             PutStr(GetLocS(&li,MSG_LOGINOK));
  83.             rc = RETURN_OK;
  84.         } else {
  85.             PutStr(GetLocS(&li,MSG_LOGINFAIL));
  86.         }
  87.     }
  88.     FreeArgs(args);
  89.  
  90.     CloseLoc(&li);
  91.  
  92. Exit:
  93.     CloseLibrary((struct Library *)muBase);
  94.     CloseLibrary((struct Library *)DOSBase);
  95.  
  96.     return(rc);
  97. }
  98.